home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 December / 2004-12 CHIP.iso / CHIP / Porady / Srodowisko PHP-MySQL / WAMP5 1.3 / wamp5_1.3.exe / {app} / www / phpmyadmin / left.php < prev    next >
PHP Script  |  2004-09-24  |  44KB  |  952 lines

  1. <?php
  2. /* $Id: left.php,v 2.38 2004/09/14 16:57:02 lem9 Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5.  
  6. /**
  7.  * Gets the variables sent to this script, retains the db name that may have
  8.  * been defined as startup option and include a core library
  9.  */
  10. require_once('./libraries/grab_globals.lib.php');
  11. if (isset($lightm_db) && !empty($lightm_db)) {
  12. // no longer urlencoded because of html entities in the db name
  13. //    $db = urldecode($lightm_db);
  14.     $db = $lightm_db;
  15. }
  16.  
  17. if (!empty($db)) {
  18.     $db_start = $db;
  19. }
  20.  
  21.  
  22. /**
  23.  * Gets a core script and starts output buffering work
  24.  */
  25. require_once('./libraries/common.lib.php');
  26. require_once('./libraries/ob.lib.php');
  27. if ($cfg['OBGzip']) {
  28.     $ob_mode = PMA_outBufferModeGet();
  29.     if ($ob_mode) {
  30.         PMA_outBufferPre($ob_mode);
  31.     }
  32. }
  33.  
  34. // This check had been put here to avoid revealing the full path
  35. // of the phpMyAdmin directory in case this script is called
  36. // directly. But some users report a "Missing hash" message and
  37. // I cannot reproduce it, so let's define $hash to a dummy value
  38. // and hope some other clue will surface, to sort this bug.
  39. //PMA_checkParameters(array('hash'));
  40. if (!isset($hash)) {
  41.     $hash='';
  42. }
  43.  
  44. require_once('./libraries/bookmark.lib.php');
  45. require_once('./libraries/relation.lib.php');
  46. $cfgRelation = PMA_getRelationsParam();
  47.  
  48. function PMA_multimerge(&$stack, &$table) {
  49. global $list_item, $table_item;
  50.  
  51.     $key = array_shift($table);
  52.  
  53.     if (count($table) > 0) {
  54.         if (!isset($stack[$key])) {
  55.             $stack[$key] = '';
  56.         }
  57.         PMA_multimerge($stack[$key], $table);
  58.     } else {
  59.         $stack['pma_name'][]      = $table_item;
  60.         $stack['pma_list_item'][] = $list_item;
  61.     }
  62. }
  63.  
  64. function PMA_reduceNest($_table) {
  65.  
  66.     if ($GLOBALS['cfg']['LeftFrameTableLevel'] > 0) {
  67.         $max = $GLOBALS['cfg']['LeftFrameTableLevel'];
  68.         $temp_table = $_table;
  69.         $new_table = array();
  70.         $last_index = 0;
  71.         for ($ti = 0; $ti <= $max; $ti++) {
  72.             if (isset($temp_table[$ti])) {
  73.                 $new_table[$ti] = $temp_table[$ti];
  74.                 unset($temp_table[$ti]);
  75.                 $last_index = $ti;
  76.             }
  77.         }
  78.  
  79.         $_table = $new_table;
  80.     }
  81.  
  82.     return $_table;
  83. }
  84.  
  85. function PMA_indent($spaces) {
  86.     $string = '';
  87.     for ($i = 0; $i <= $spaces; $i++) {
  88.         $string .= ' ';
  89.     }
  90.  
  91.     return $string;
  92. }
  93.  
  94. function PMA_nestedSetHeaderParent($baseid, $key, $keyhistory, $indent, $indent_level, $val, $childout = true) {
  95.     $name = $key;
  96.     //$id = preg_replace('@[^a-z0-9]*@i', '', $baseid . $keyhistory . $key) . $indent;
  97.     $id = base64_encode($baseid . $keyhistory . $key) . $indent;
  98.  
  99.     $groupkey = $keyhistory . ($key != $keyhistory ? $GLOBALS['cfg']['LeftFrameTableSeparator'] . $key : '');
  100.  
  101.     $on_mouse = (($GLOBALS['cfg']['LeftPointerEnable'] == FALSE) ? '' : ' onmouseover="if (isDOM || isIE4) {hilightBase(\'el' . $id . '\', \'' . $GLOBALS['cfg']['LeftPointerColor'] . '\')}" onmouseout="if (isDOM || isIE4) {hilightBase(\'el' . $id . '\', \'' . $GLOBALS['cfg']['LeftBgColor'] . '\')}"');
  102.  
  103.     $countarray = $val;
  104.     if (count($countarray) == 2 && isset($countarray['pma_name']) && isset($countarray['pma_list_item'])) {
  105.         $counter = count($countarray['pma_name']);
  106.     } else {
  107.         unset($countarray['pma_name']);
  108.         if (count($countarray) > 1) {
  109.             unset($countarray['pma_list_item']);
  110.         }
  111.         $counter = count($countarray);
  112.     }
  113.  
  114.     echo "\n";
  115.     echo PMA_indent($indent * 5) . '<div id="el' . $id . 'Parent" class="parent"' . $on_mouse . '>' . "\n";
  116.     echo PMA_indent($indent * 6) . '<div class="nowrap"><img src="' . $GLOBALS['pmaThemeImage'] . 'spacer.png' . '" border="0" width="' . (($indent - 1) * $indent_level) . '" height="9" alt="" /><a class="item" href="' . $GLOBALS['cfg']['DefaultTabDatabase'] . '?' . $GLOBALS['common_url_query'] . '&tbl_group=' . htmlspecialchars($groupkey) . '" onclick="if (capable) {expandBase(\'el' . $id . '\', true); return false} else {return true}">';
  117.     echo '<img name="imEx" id="el' . $id . 'Img" src="' . $GLOBALS['pmaThemeImage'] . 'b_plus.png" border="0" width="9" height="9" alt="+" /></a>' . "\n";
  118.     echo PMA_indent($indent * 6) . '<a class="item" href="' . $GLOBALS['cfg']['DefaultTabDatabase'] . '?' . $GLOBALS['common_url_query'] . '&tbl_group=' . htmlspecialchars($groupkey) . '" title="' . htmlspecialchars($name) . '" onclick="if (capable) {expandBase(\'el' . $id . '\', false)}"><span class="heada">' . htmlspecialchars($name) . '<bdo dir="' . $GLOBALS['text_dir'] . '">  </bdo></span><span class="headaCnt">(' . $counter . ')</span></a></div>' . "\n";
  119.     echo PMA_indent($indent * 5) . '</div><!-- class="PMA_nestedSetHeaderParent" -->' . "\n";
  120.     echo "\n";
  121.  
  122.     if ($childout) {
  123.         echo PMA_indent($indent * 5) . '<div id="el' . $id . 'Child" class="child nowrap" ' . $on_mouse . '>' . "\n";
  124.     }
  125. }
  126.  
  127. function PMA_nestedSetHeader($baseid, $tablestack, $keyhistory, $indent, $indent_level, $headerOut, $firstGroup = false, $firstGroupClose = true) {
  128.     if ($firstGroup) {
  129.         PMA_nestedSetHeaderParent($baseid, $firstGroup, $keyhistory, $indent, $indent_level, $tablestack);
  130.         $indent++;
  131.     }
  132.  
  133.     foreach ($tablestack AS $key => $val) {
  134.         if ($key != 'pma_name' && $key != 'pma_list_item') {
  135.             if ($headerOut) {
  136.                 PMA_nestedSetHeaderParent($baseid, $key, $keyhistory, $indent, $indent_level, $val);
  137.             }
  138.  
  139.             if (isset($val['pma_name']) && isset($val['pma_list_item']) && count($val) == 2) {
  140.                 PMA_nestedSet($baseid, $val, $key, $keyhistory . ($keyhistory != '' ? $GLOBALS['cfg']['LeftFrameTableSeparator'] : '') . $key, false, ($indent + 1));
  141.             } else {
  142.                 PMA_nestedSet($baseid, $val, $key, $keyhistory . ($keyhistory != '' ? $GLOBALS['cfg']['LeftFrameTableSeparator'] : '') . $key, true, ($indent + 1));
  143.             }
  144.  
  145.             if ($headerOut) {
  146.                 echo PMA_indent($indent * 5) . '</div><!-- class="PMA_nestedSetHeader" -->' . "\n";
  147.             }
  148.         }
  149.     }
  150.  
  151.     if ($firstGroup && $firstGroupClose) {
  152.         echo PMA_indent($indent * 4) . '</div><!-- class="PMA_nestedSetHeader2" -->' . "\n";
  153.     } elseif ($firstGroup) {
  154.         echo PMA_indent($indent * 4) . '<!-- spacer="div omitted" class="PMA_nestedSetHeader2" -->' . "\n";
  155.     }
  156. }
  157.  
  158. function PMA_nestedSet($baseid, $tablestack, $key = '__protected__', $keyhistory = '', $headerOut = false, $indent = 1) {
  159.  
  160.     if ($keyhistory == '' && $key != '__protected__') {
  161.         $keyhistory = $key;
  162.     }
  163.  
  164.     $indent_level = 9;
  165.  
  166.     if (isset($tablestack)
  167.         && isset($tablestack['pma_name'])
  168.         && isset($tablestack['pma_list_item'])) {
  169.  
  170.         if (count($tablestack) > 1 && !empty($key) && isset($tablestack['pma_name']) && isset($tablestack['pma_list_item']) && $indent == 1) {
  171.             PMA_nestedSetHeader($baseid, $tablestack, $keyhistory, ($indent+1), $indent_level, $headerOut, $key, false);
  172.             $divClose = true;
  173.             $extra_indent = 1;
  174.         } else {
  175.             PMA_nestedSetHeader($baseid, $tablestack, $keyhistory, $indent, $indent_level, $headerOut);
  176.             $divClose = false;
  177.             $extra_indent = 0;
  178.         }
  179.  
  180.         $on_mouse = (($GLOBALS['cfg']['LeftPointerEnable'] == FALSE) ? '' : ' onmouseover="if (isDOM || isIE4) {hilightBase(\'el' . $keyhistory . $key . '\', \'' . $GLOBALS['cfg']['LeftPointerColor'] . '\')}" onmouseout="if (isDOM || isIE4) {hilightBase(\'el' . $keyhistory . $key . '\', \'' . $GLOBALS['cfg']['LeftBgColor'] . '\')}"');
  181.  
  182.         $loops = 0;
  183.         foreach ($tablestack['pma_name'] AS $tkey => $tval) {
  184.  
  185.             echo PMA_indent($indent * 5) . '<img src="' . $GLOBALS['pmaThemeImage'] . 'spacer.png' .'" border="0" width="' . (($indent+$extra_indent) * $indent_level) . '" height="9" alt="" />';
  186.             $items = explode("\n", $tablestack['pma_list_item'][$tkey]);
  187.             foreach ($items AS $ikey => $ival) {
  188.                 echo "\n";
  189.                 echo PMA_indent(($indent * 5)) . $ival;
  190.             }
  191.             echo "\n";
  192.  
  193.             $loops++;
  194.         }
  195.  
  196.         if ($divClose) {
  197.             echo PMA_indent($indent * 5) . '</div><!-- space="putting omitted div" class="PMA_nestedSet2" -->';
  198.         }
  199.  
  200.     } elseif (is_array($tablestack)) {
  201.         PMA_nestedSetHeader($baseid, $tablestack, $keyhistory, (($key == '__protected__' && $indent == 1 )? ($indent-1) : ($indent + 1)), $indent_level, $headerOut,  (($key == '__protected__' && $indent == 1) || ($indent > 1) ? false : $key));
  202.     }
  203.  
  204.     return true;
  205. }
  206. /**
  207.  * Get the list and number of available databases.
  208.  * Skipped if no server selected: in this case no database should be displayed
  209.  * before the user choose among available ones at the welcome screen.
  210.  */
  211. if ($server > 0) {
  212.     PMA_availableDatabases(); // this function is defined in "common.lib.php"
  213. } else {
  214.     $num_dbs = 0;
  215. }
  216.  
  217.  
  218. // garvin: For re-usability, moved http-headers
  219. // to a seperate file. It can now be included by header.inc.php,
  220. // queryframe.php, querywindow.php.
  221.  
  222. require_once('./libraries/header_http.inc.php');
  223.  
  224. /**
  225.  * Displays the frame
  226.  */
  227. // Gets the font sizes to use
  228. PMA_setFontSizes();
  229. echo "<?xml version=\"1.0\" encoding=\"" . $GLOBALS['charset'] . "\"?".">"; // remove vertical scroll bar bug in ie
  230. ?>
  231. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  232.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  233. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $available_languages[$lang][2]; ?>" lang="<?php echo $available_languages[$lang][2]; ?>" dir="<?php echo $text_dir; ?>">
  234.  
  235. <head>
  236.     <title>phpMyAdmin</title>
  237.     <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset; ?>" />
  238.     <base<?php if (!empty($cfg['PmaAbsoluteUri'])) echo ' href="' . $cfg['PmaAbsoluteUri'] . '"'; ?> target="phpmain<?php echo $hash; ?>" />
  239.  
  240.     <script type="text/javascript" language="javascript">
  241.     <!--
  242.     function goTo(targeturl, targetframe) {
  243.         if (!targetframe) {
  244.             targetframe = self;
  245.         }
  246.  
  247.         if (targetframe) {
  248. <?php if (PMA_USR_BROWSER_AGENT != 'SAFARI') { ?>
  249.             targetframe.location.replace(targeturl);
  250. <?php } else { ?>
  251.             targetframe.location.href = targeturl;
  252. <?php } ?>
  253.         }
  254.  
  255.         return true;
  256.     }
  257.  
  258. <?php
  259. if (isset($lightm_db) && !empty($lightm_db)) {
  260. ?>
  261.     goTo('./<?php echo $cfg['DefaultTabDatabase'] . '?' . PMA_generate_common_url($db, '', '&');?>', window.parent.frames['phpmain<?php echo $hash; ?>']);
  262. <?php
  263. } elseif (isset($lightm_db)) {
  264. ?>
  265.     goTo('./main.php?<?php echo PMA_generate_common_url('', '', '&');?>', window.parent.frames['phpmain<?php echo $hash; ?>']);
  266. <?php
  267. }
  268. ?>
  269.     //-->
  270.     </script>
  271.  
  272. <?php
  273. // Expandable/collapsible databases list is only used if there is more than one
  274. // database to display
  275. if (($num_dbs > 1 || !empty($cfg['LeftFrameTableSeparator'])) && !$cfg['LeftFrameLight']) {
  276.     echo "\n";
  277.     ?>
  278.     <!-- Collapsible tables list scripts -->
  279.     <script type="text/javascript" language="javascript">
  280.     <!--
  281.     var imgUrlPlus  = "<?php echo $GLOBALS['pmaThemeImage'] . 'b_plus.png'; ?>";
  282.     var imgUrlMinus = "<?php echo $GLOBALS['pmaThemeImage'] . 'b_minus.png'; ?>";
  283.     var isDOM      = (typeof(document.getElementsByTagName) != 'undefined'
  284.                       && typeof(document.createElement) != 'undefined')
  285.                    ? 1 : 0;
  286.     var isIE4      = (typeof(document.all) != 'undefined'
  287.                       && parseInt(navigator.appVersion) >= 4)
  288.                    ? 1 : 0;
  289.     var isNS4      = (typeof(document.layers) != 'undefined')
  290.                    ? 1 : 0;
  291.     var capable    = (isDOM || isIE4 || isNS4)
  292.                    ? 1 : 0;
  293.     // Uggly fix for Opera and Konqueror 2.2 that are half DOM compliant
  294.     if (capable) {
  295.         if (typeof(window.opera) != 'undefined') {
  296.             var browserName = ' ' + navigator.userAgent.toLowerCase();
  297.             if ((browserName.indexOf('konqueror 7') == 0)) {
  298.                 capable = 0;
  299.             }
  300.         }
  301.         else if (typeof(navigator.userAgent) != 'undefined') {
  302.             var browserName = ' ' + navigator.userAgent.toLowerCase();
  303.             if ((browserName.indexOf('konqueror') > 0) && (browserName.indexOf('konqueror/3') == 0)) {
  304.                 capable = 0;
  305.             }
  306.         } // end if... else if...
  307.     } // end if
  308.  
  309.     var isServer    = <?php echo ($server > 0) ? 'true' : 'false'; ?>;
  310.  
  311.     document.writeln('<link rel="stylesheet" type="text/css" href="./css/phpmyadmin.css.php?lang=<?php echo $lang; ?>&js_frame=left&js_capable=' + capable + '&js_isDOM=' + isDOM + '&js_isIE4=' + isIE4 + '" />');
  312.     //-->
  313.     </script>
  314. <noscript>
  315.         <link rel="stylesheet" type="text/css" href="./css/phpmyadmin.css.php?lang=<?php echo $lang; ?>&js_frame=left&js_capable=0&js_isDOM=0&js_isIE4=0" />
  316. </noscript>
  317.  
  318.     <script src="libraries/left.js" type="text/javascript" language="javascript1.2"></script>
  319.     <?php
  320. } // end if ($num_dbs > 1)
  321.  
  322. else if ($num_dbs == 1) {
  323.     echo "\n";
  324.     ?>
  325.     <link rel="stylesheet" type="text/css" href="./css/phpmyadmin.css.php?js_frame=left&js_capable=0&js_isDOM=0&js_isIE4=0" />
  326.     <?php
  327. } // end if ($num_dbs == 1)
  328.  
  329. else {
  330.     echo "\n";
  331.     ?>
  332.     <link rel="stylesheet" type="text/css" href="./css/phpmyadmin.css.php?js_frame=left&num_dbs=0" />
  333.     <?php
  334. } // end if ($num_dbs < 1)
  335.  
  336. echo "\n";
  337. ?>
  338. </head>
  339.  
  340. <body bgcolor="<?php echo $cfg['LeftBgColor']; ?>">
  341.  
  342. <?php
  343. if ($cfg['LeftDisplayLogo'] && !$cfg['QueryFrame']) {
  344. ?>
  345. <!-- phpMyAdmin logo -->
  346. <?php
  347.     if (@file_exists($pmaThemeImage . 'logo_left.png')) {
  348. ?>
  349.     <div align="center">
  350.         <a href="http://www.phpmyadmin.net" target="_blank"><img src="<?php echo '' . $pmaThemeImage . 'logo_left.png'; ?>" alt="phpMyAdmin" vspace="3" border="0" /></a>
  351.     </div>
  352. <?php
  353.     } else {
  354.         echo '<div align="center"><a href="http://www.phpmyadmin.net" target="_blank">';
  355.         echo '<img src="' . $GLOBALS['pmaThemeImage'] . 'pma_logo2.png' . '" alt="phpMyAdmin" border="0" />';
  356.         echo '</a></div>' . "\n";
  357.     }
  358.     echo '<hr />';
  359. } // end of display logo
  360. echo "\n";
  361.  
  362. if (!$cfg['QueryFrame']) {
  363.     echo "\n";
  364. ?>
  365. <!-- Link to the welcome page -->
  366.     <div id="el1Parent" class="parent nowrap" align="center">
  367.     <?php
  368.     if ($cfg['MainPageIconic']) {
  369.         $str_spacer_links='';
  370.     } else{
  371.         $str_spacer_links=' - ';
  372.     }
  373.     echo '<a class="item" href="main.php?' . PMA_generate_common_url() . '" target="phpmain' . $hash . '">'
  374.        . ($cfg['MainPageIconic']
  375.             ? '<img src="' . $pmaThemeImage . 'b_home.png" width="16" height="16" border="0" hspace="2" alt="' . $strHome . '" title="' . $strHome . '"'
  376.                 .' onmouseover="this.style.backgroundColor=\'#ffffff\';" onmouseout="this.style.backgroundColor=\'\';" align="middle" />'
  377.             : '<b>' . $strHome . '</b>')
  378.        . '</a>';
  379.     // Logout for advanced authentication
  380.     if ($cfg['Server']['auth_type'] != 'config') {
  381.         echo $str_spacer_links;
  382.         echo '<a class="item" href="index.php?' . PMA_generate_common_url() . '&old_usr=' . urlencode($PHP_AUTH_USER) . '" target="_parent">'
  383.            . ($cfg['MainPageIconic']
  384.                 ? '<img src="' . $pmaThemeImage . 's_loggoff.png" width="16" height="16" border="0" hspace="2" alt="' . $strLogout . '" title="' . $strLogout . '"'
  385.                     .' onmouseover="this.style.backgroundColor=\'#ffffff\';" onmouseout="this.style.backgroundColor=\'\';" align="middle" />'
  386.                 : '<b>' . $strLogout . '</b>')
  387.            . '</a>';
  388.     } // end if
  389.     if ($cfg['MainPageIconic']) {
  390.         echo '<img src="' . $GLOBALS['pmaThemeImage'] . 'spacer.png' . '" width="2" height="1" border="0" />'
  391.            . '<a href="Documentation.html" target="documentation" class="item">'
  392.            . '<img src="' . $pmaThemeImage . 'b_docs.png" border="0" hspace="1" width="16" height="16" alt="' . $strPmaDocumentation . '" title="' . $strPmaDocumentation . '"'
  393.            .' onmouseover="this.style.backgroundColor=\'#ffffff\';" onmouseout="this.style.backgroundColor=\'\';" align="middle" />'
  394.            . '</a>';
  395.        echo ''
  396.            . '<a href="' . $cfg['MySQLManualBase'] . '" target="documentation" class="item">'
  397.            . '<img src="' . $pmaThemeImage . 'b_sqlhelp.png" border="0" hspace="1" width="16" height="16" alt="MySQL - ' . $strDocu . '" title="MySQL - ' . $strDocu . '"'
  398.            .' onmouseover="this.style.backgroundColor=\'#ffffff\';" onmouseout="this.style.backgroundColor=\'\';" align="middle" />'
  399.            . '</a>';
  400.     }
  401. ?>
  402.     </div>
  403.     <hr />
  404. <?php
  405.     if ($cfg['LeftDisplayServers']) {
  406.         $show_server_left = TRUE;
  407.         include('./libraries/select_server.lib.php');
  408.     }
  409. } // end !$cfg['QueryFrame']
  410.  
  411. ?>
  412. <!-- Databases and tables list -->
  413. <?php
  414. // Don't display expansible/collapsible database info if:
  415. // 1. $server == 0 (no server selected)
  416. //    This is the case when there are multiple servers and
  417. //    '$cfg['ServerDefault'] = 0' is set. In that case, we want the welcome
  418. //    screen to appear with no database info displayed.
  419. // 2. there is only one database available (ie either only one database exists
  420. //    or $cfg['Servers']['only_db'] is defined and is not an array)
  421. //    In this case, the database should not be collapsible/expandable
  422. if ($num_dbs > 1) {
  423.  
  424.     // Light mode -> beginning of the select combo for databases
  425.     // Note: When javascript is active, the frameset will be changed from
  426.     // within left.php. With no JS (<noscript>) the whole frameset will
  427.     // be rebuilt with the new target frame.
  428.     if ($cfg['LeftFrameLight']) {
  429.         if (!$cfg['QueryFrame']) {
  430.         ?>
  431.     <script type="text/javascript" language="javascript">
  432.     <!--
  433.         document.writeln('<form method="post" action="left.php" name="left" target="nav" style="margin: 0px; padding: 0px;">');
  434.     //-->
  435.     </script>
  436.     <noscript>
  437.         <form method="post" action="index.php" name="left" target="_parent" style="margin: 0px; padding: 0px;">
  438.     </noscript>
  439.     <?php
  440.             echo PMA_generate_common_hidden_inputs();
  441.             echo '        <input type="hidden" name="hash" value="' . $hash . '" />' . "\n";
  442.             echo '        <span class="heada"><b>' . $strDatabase . ':</b></span><br />';
  443.             echo '        <select name="lightm_db" onchange="this.form.submit()">' . "\n";
  444.             echo '            <option value="">(' . $strDatabases . ') ...</option>' . "\n";
  445.         } // end !$cfg['QueryFrame']
  446.  
  447.         $table_list = '';
  448.         $table_list_header = '';
  449.         $db_name    = '';
  450.     } // end FrameLight
  451.  
  452.     $selected_db = 0;
  453.  
  454.     // natural order for db list
  455.     if ($cfg['NaturalOrder'] && $num_dbs > 0) {
  456.         $dblist_temp = $dblist;
  457.         natsort($dblist_temp);
  458.         $i = 0;
  459.         foreach ($dblist_temp as $each) {
  460.             $dblist[$i] = $each;
  461.             $i++;
  462.         }
  463.     }
  464.  
  465.     // Gets the tables list per database
  466.     for ($i = 0; $i < $num_dbs; $i++) {
  467.         $db = $dblist[$i];
  468.         $j  = $i + 2;
  469.         if (!empty($db_start) && $db == $db_start) {
  470.             $selected_db = $j;
  471.         }
  472.         $tables              = PMA_DBI_try_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', NULL, PMA_DBI_QUERY_STORE);
  473.         $num_tables          = ($tables) ? @PMA_DBI_num_rows($tables) : 0;
  474.         $common_url_query    = PMA_generate_common_url($db);
  475.         if ($num_tables) {
  476.             $num_tables_disp = $num_tables;
  477.         } else {
  478.             $num_tables_disp = '-';
  479.         }
  480.  
  481.         // Get additional information about tables for tooltip
  482.         if ($cfg['ShowTooltip'] && PMA_MYSQL_INT_VERSION >= 32303
  483.             && $num_tables
  484.             && (!$cfg['LeftFrameLight'] || $selected_db == $j)) {
  485.             $tooltip = array();
  486.             $tooltip_name = array();
  487.             $result  = PMA_DBI_try_query('SHOW TABLE STATUS FROM ' . PMA_backquote($db));
  488.             while ($tmp = PMA_DBI_fetch_assoc($result)) {
  489.                 $tooltip_name[$tmp['Name']] = (!empty($tmp['Comment']) ? $tmp['Comment'] . ' ' : '');
  490.                 $tmp['Comment'] = ($cfg['ShowTooltipAliasTB'] && $cfg['ShowTooltipAliasTB'] !== 'nested' ? $tmp['Name'] : $tmp['Comment']);
  491.  
  492.                 $tooltip[$tmp['Name']] = (!empty($tmp['Comment']) ? $tmp['Comment'] . ' ' : '')
  493.                                        . '(' . (isset($tmp['Rows']) ? $tmp['Rows'] : '0') . ' ' . $strRows . ')';
  494.             } // end while
  495.         } // end if
  496.  
  497.         // garvin: Get comments from PMA comments table
  498.         $db_tooltip = '';
  499.         if ($cfg['ShowTooltip'] && $cfgRelation['commwork']) {
  500.             $tmp_db_tooltip = PMA_getComments($db);
  501.             if (is_array($tmp_db_tooltip)) {
  502.                 $db_tooltip = implode(' ', $tmp_db_tooltip);
  503.             }
  504.         }
  505.  
  506.         // No light mode -> displays the expandible/collapsible db list
  507.         if ($cfg['LeftFrameLight'] == FALSE) {
  508.  
  509.             // Displays the database name
  510.             $on_mouse = (($cfg['LeftPointerEnable'] == FALSE) ? '' : ' onmouseover="if (isDOM || isIE4) {hilightBase(\'el' . $j . '\', \'' . $cfg['LeftPointerColor'] . '\')}" onmouseout="if (isDOM || isIE4) {hilightBase(\'el' . $j . '\', \'' . $cfg['LeftBgColor'] . '\')}"');
  511.  
  512.             echo "\n";
  513.             echo '    <div id="el' . $j . 'Parent" class="parent nowrap"' . $on_mouse . '>';
  514.  
  515.             if (!empty($num_tables)) {
  516.                 echo "\n";
  517.             ?>
  518.             <a class="item" href="<?php echo $cfg['DefaultTabDatabase']; ?>?<?php echo $common_url_query; ?>" onclick="if (capable) {expandBase('el<?php echo $j; ?>', true); return false} else {return true}">
  519.             <img name="imEx" id="el<?php echo $j; ?>Img" src="<?php echo $pmaThemeImage; ?>b_plus.png" border="0" width="9" height="9" alt="+" /></a>
  520.             <?php
  521.             } else {
  522.                 echo "\n";
  523.             ?>
  524.             <img name="imEx" src="<?php echo $pmaThemeImage; ?>b_minus.png" border="0" width="9" height="9" alt="-" />
  525.             <?php
  526.             }
  527.             echo "\n";
  528.             ?>
  529.             <a class="item" href="<?php echo $cfg['DefaultTabDatabase']; ?>?<?php echo $common_url_query; ?>" title="<?php echo ($db_tooltip != '' && $cfg['ShowTooltipAliasDB'] ? htmlspecialchars($db) : htmlspecialchars($db_tooltip)); ?>" onclick="if (capable) {expandBase('el<?php echo $j; ?>', false)}">
  530.             <span class="heada"><?php echo ($db_tooltip != '' && $cfg['ShowTooltipAliasDB'] ? '<i>' . htmlspecialchars($db_tooltip) . '</i>' : htmlspecialchars($db)); ?><bdo dir="<?php echo($text_dir); ?>">  </bdo></span><span class="headaCnt">(<?php echo $num_tables_disp; ?>)</span></a>
  531.         </div>
  532.  
  533.         <div id="el<?php echo $j;?>Child" class="child nowrap" style="margin-bottom: 5px"<?php echo $on_mouse; ?>>
  534.         <?php
  535.             // Displays the list of tables from the current database
  536.             $tablestack  = array();
  537.             $table_array = array();
  538.             while (list($table) = PMA_DBI_fetch_row($tables)) {
  539.                 $table_item = (!empty($tooltip_name) && isset($tooltip_name[$table]) && !empty($tooltip_name[$table]) && $cfg['ShowTooltipAliasTB'] && strtolower($cfg['ShowTooltipAliasTB']) !== 'nested'
  540.                             ? htmlspecialchars($tooltip_name[$table])
  541.                             : htmlspecialchars($table));
  542.                 $table_array[$table] = $table_item;
  543.             }
  544.  
  545.             if ($cfg['NaturalOrder']) {
  546.                 natsort($table_array);
  547.             }
  548.  
  549.             foreach ($table_array as $table => $table_sortkey) {
  550.                 $alias = (!empty($tooltip_name) && isset($tooltip_name[$table]))
  551.                            ? htmlspecialchars($tooltip_name[$table])
  552.                            : '';
  553.                 $url_title = (!empty($tooltip) && isset($tooltip[$table]))
  554.                            ? htmlspecialchars($tooltip[$table])
  555.                            : '';
  556.                 $table_item = ($alias != '' && $cfg['ShowTooltipAliasTB'] && strtolower($cfg['ShowTooltipAliasTB']) !== 'nested'
  557.                             ? $alias
  558.                             : htmlspecialchars($table));
  559.                 $tablename = ($alias != '' && $cfg['ShowTooltipAliasTB']
  560.                            ? $alias
  561.                            : htmlspecialchars($table));
  562.  
  563.                 $book_sql_query = PMA_queryBookmarks($db, $cfg['Bookmark'], '\'' . PMA_sqlAddslashes($table) . '\'', 'label');
  564.  
  565.                 $list_item = '<a target="phpmain' . $hash . '" href="sql.php?' . $common_url_query . '&table=' . urlencode($table) . '&sql_query=' . (isset($book_sql_query) && $book_sql_query != FALSE ? urlencode($book_sql_query) : urlencode('SELECT * FROM ' . PMA_backquote($table))) . '&pos=0&goto=' . $cfg['DefaultTabTable'] . '" title="' . $strBrowse . ': ' . $url_title . '">';
  566.                 $list_item .= '<img src="' . $pmaThemeImage . 'b_sbrowse.png" width="10" height="10" border="0" alt="' . $strBrowse . ': ' . $url_title . '" /></a>';
  567.                 $list_item .= '<bdo dir="' . $text_dir . '"> </bdo>' . "\n";
  568.                 $list_item .= '<a class="tblItem" id="tbl_' . md5($table) . '" title="' . $url_title . '" target="phpmain' . $hash . '" href="' . $cfg['DefaultTabTable'] . '?' . $common_url_query . '&table=' . urlencode($table) . '">';
  569.                 $list_item .= $table_item . '</a><br />' . "\n";
  570.  
  571.                 // garvin: Check whether to display nested sets
  572.                 if (!empty($cfg['LeftFrameTableSeparator'])) {
  573.                     $_table = explode($cfg['LeftFrameTableSeparator'],  str_replace('\'', '\\\'', $tablename));
  574.                     if (is_array($_table)) {
  575.                         foreach ($_table AS $key => $val) {
  576.                             if ($val == '') {
  577.                                 $_table[$key] = '__protected__';
  578.                             }
  579.                         }
  580.                         $_table = PMA_reduceNest($_table);
  581.  
  582.                         if (count($_table) == 1) {
  583.                             array_unshift($_table, '');
  584.                         }
  585.                         PMA_multimerge($tablestack, $_table);
  586.                     } else {
  587.                         $tablestack['']['pma_name'][] = $table_item;
  588.                         $tablestack['']['pma_list_item'][] = $list_item;
  589.                     }
  590.                 } else {
  591.                     $tablestack['']['pma_name'][] = $table_item;
  592.                     $tablestack['']['pma_list_item'][] = $list_item;
  593.                 }
  594.             } // end while (tables list)
  595.  
  596.             PMA_nestedSet($j, $tablestack);
  597.         ?>
  598.         </div>
  599.         <?php
  600.             echo "\n";
  601.         }
  602.  
  603.         // Light mode -> displays the select combo with databases names and the
  604.         // list of tables contained in the current database
  605.         else {
  606.             echo "\n";
  607.  
  608.             // Builds the databases' names list
  609.             if (!empty($db_start) && $db == $db_start) {
  610.                 $table_title = array();
  611.                 $table_array = array();
  612.                 // Gets the list of tables from the current database
  613.                 while (list($table) = PMA_DBI_fetch_row($tables)) {
  614.                     $table_array[$table] = '';
  615.                     $url_title  = (!empty($tooltip) && isset($tooltip[$table]))
  616.                                 ? htmlspecialchars($tooltip[$table])
  617.                                 : '';
  618.                     $alias = (!empty($tooltip_name) && isset($tooltip_name[$table]))
  619.                                ? htmlspecialchars($tooltip_name[$table])
  620.                                : '';
  621.  
  622.                     $book_sql_query = PMA_queryBookmarks($db, $cfg['Bookmark'], '\'' . PMA_sqlAddslashes($table) . '\'', 'label');
  623.  
  624.                     // natural order or not, use an array for the table list
  625.  
  626.                     $table_array[$table] .= '    <div class="nowrap"><a target="phpmain' . $hash . '" href="sql.php?' . $common_url_query . '&table=' . urlencode($table) . '&sql_query=' . (isset($book_sql_query) && $book_sql_query != FALSE ? urlencode($book_sql_query) : urlencode('SELECT * FROM ' . PMA_backquote($table))) . '&pos=0&goto=' . $cfg['DefaultTabTable'] . '">' . "\n";
  627.                     $table_array[$table] .= '              <img src="' . $pmaThemeImage . 'b_sbrowse.png" width="10" height="10" border="0" alt="' . $strBrowse . ': ' . $url_title . '" title="' . $strBrowse . ': ' . $url_title . '" /></a><bdo dir="' . $text_dir . '"> </bdo>' . "\n";
  628.  
  629.                     if (PMA_USR_BROWSER_AGENT == 'IE') {
  630.                         $table_array[$table] .= '          <span class="tblItem"><a class="tblItem" id="tbl_' . md5($table) . '" title="' . $url_title . '" target="phpmain' . $hash . '" href="' . $cfg['DefaultTabTable'] . '?' . $common_url_query . '&table=' . urlencode($table) . '">' . ($alias != '' && $cfg['ShowTooltipAliasTB'] ? $alias : htmlspecialchars($table)) . '</a></span></div>' . "\n";
  631.                     } else {
  632.                         $table_array[$table] .= '          <a class="tblItem" id="tbl_' . md5($table) . '" title="' . $url_title . '" target="phpmain' . $hash . '" href="' . $cfg['DefaultTabTable'] . '?' . $common_url_query . '&table=' . urlencode($table) . '">' . ($alias != '' && $cfg['ShowTooltipAliasTB'] ? $alias : htmlspecialchars($table)) . '</a></div>' . "\n";
  633.                     }
  634.  
  635.                     $table_title[$table] = htmlspecialchars($table);
  636.  
  637.                 } // end while (tables list)
  638.  
  639.                 if (count($table_title) > 0) {
  640.                     if ($cfg['NaturalOrder'] && $num_tables > 0) {
  641.                         natsort($table_title);
  642.                     }
  643.  
  644.                     foreach ($table_title as $each_key => $each_val) {
  645.                         $table_list .= ' ' . $table_array[$each_key];
  646.                     }
  647.                 } else {
  648.                     $table_list = '    <br /><br />' . "\n"
  649.                                 . '    <div>' . $strNoTablesFound . '</div>' . "\n";
  650.                 }
  651.                 $selected = ' selected="selected"';
  652.  
  653.                 $table_list_header .= '    <a class="item" target="phpmain' . $hash . '" href="' . $cfg['DefaultTabDatabase'] . '?' . $common_url_query . '">' . "\n";
  654.                 $table_list_header .= '        <span class="heada"><b>' . ($db_tooltip != '' && $cfg['ShowTooltipAliasTB'] ? htmlspecialchars($db_tooltip) : htmlspecialchars($db)) . '</b><bdo dir="' . $text_dir . '">  </bdo></span></a><br />' . "\n\n";
  655.             } else {
  656.                 $selected = '';
  657.             } // end if... else...
  658.             if (!$cfg['QueryFrame']) {
  659.                 if (!empty($num_tables)) {
  660.                     echo '            <option value="' . htmlspecialchars($db) . '"' . $selected . '>'
  661.                        . ($db_tooltip != '' && $cfg['ShowTooltipAliasDB'] ? htmlspecialchars($db_tooltip) : htmlspecialchars($db)) . ' (' . $num_tables . ')</option>' . "\n";
  662.                 } else {
  663.                     echo '            <option value="' . htmlspecialchars($db) . '"' . $selected . '>'
  664.                        . ($db_tooltip != '' && $cfg['ShowTooltipAliasDB'] ? htmlspecialchars($db_tooltip) : htmlspecialchars($db)) . ' (-)</option>' . "\n";
  665.                 }
  666.             } // end !$cfg['QueryFrame']
  667.  
  668.         } // end if (light mode)
  669.  
  670.     } // end for $i (db list)
  671.  
  672.     // Light mode -> end of the select combo for databases and table list for
  673.     // the current database
  674.     if ($cfg['LeftFrameLight']) {
  675.         if (!$cfg['QueryFrame']) {
  676.             echo '        </select>' . "\n";
  677.             echo '        <noscript><input type="submit" name="Go" value="' . $strGo . '" /></noscript>' . "\n";
  678.             echo '    </form>' . "\n";
  679.         }
  680.         if (!$table_list) {
  681.             $table_list = '    <div align="center"><b>' . $strSelectADb . '</b></div>' . "\n";
  682.         }
  683.  
  684.         // Displays the current database name and the list of tables it
  685.         // contains
  686.         if (!$cfg['QueryFrame']) {
  687.            echo '<hr />';
  688.         }
  689.         echo $table_list_header;
  690.         echo $table_list;
  691.     }
  692.  
  693.     // No light mode -> initialize some js variables for the
  694.     // expandible/collapsible stuff
  695.     else {
  696.     ?>
  697.  
  698.     <!-- Arrange collapsible/expandable db list at startup -->
  699.     <script type="text/javascript" language="javascript1.2">
  700.     <!--
  701.         if (isNS4) {
  702.             firstEl  = 'el1Parent';
  703.             firstInd = nsGetIndex(firstEl);
  704.             nsShowAll();
  705.             nsArrangeList();
  706.         }
  707.         var expandedDb = '<?php echo (empty($selected_db)) ? '' : 'el' . $selected_db . 'Child'; ?>';
  708.     //-->
  709.     </script>
  710.     <?php
  711.  
  712.     } // end if... else... (light mode)
  713.  
  714. } // end if ($server > 1)
  715.  
  716.  
  717. // Case where only one database has to be displayed
  718. else if ($num_dbs == 1) {
  719.     $db                  = $dblist[0];
  720.     $tables              = PMA_DBI_try_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', NULL, PMA_DBI_QUERY_STORE);
  721.     $num_tables          = ($tables) ? @PMA_DBI_num_rows($tables) : 0;
  722.     $common_url_query    = PMA_generate_common_url($db);
  723.     if ($num_tables) {
  724.         $num_tables_disp = $num_tables;
  725.     } else {
  726.         $num_tables_disp = '-';
  727.     }
  728.  
  729.     // Get additional infomation about tables for tooltip
  730.     if ($cfg['ShowTooltip'] && PMA_MYSQL_INT_VERSION >= 32303
  731.         && $num_tables) {
  732.         $tooltip = array();
  733.         $tooltip_name = array();
  734.         $result  = PMA_DBI_try_query('SHOW TABLE STATUS FROM ' . PMA_backquote($db), NULL, PMA_DBI_QUERY_STORE);
  735.         while ($tmp = PMA_DBI_fetch_assoc($result)) {
  736.             $tooltip_name[$tmp['Name']] = (!empty($tmp['Comment']) ? $tmp['Comment'] . ' ' : '');
  737.             $tmp['Comment'] = ($cfg['ShowTooltipAliasTB'] && $cfg['ShowTooltipAliasTB'] !== 'nested' ? $tmp['Name'] : $tmp['Comment']);
  738.  
  739.             $tooltip[$tmp['Name']] = (!empty($tmp['Comment']) ? $tmp['Comment'] . ' ' : '')
  740.                                    . '(' . (isset($tmp['Rows']) ? $tmp['Rows'] : '0') . ' ' . $strRows . ')';
  741.         } // end while
  742.     } // end if
  743.  
  744.     // garvin: Get comments from PMA comments table
  745.     $db_tooltip = '';
  746.     if ($cfg['ShowTooltip'] && $cfgRelation['commwork']) {
  747.         $tmp_db_tooltip = PMA_getComments($db);
  748.         if (is_array($tmp_db_tooltip)) {
  749.             $db_tooltip = implode(' ', $tmp_db_tooltip);
  750.         }
  751.     }
  752.  
  753.  
  754.     // Displays the database name
  755.     if (!$cfg['LeftFrameLight']) {
  756.             $on_mouse = (($cfg['LeftPointerEnable'] == FALSE) ? '' : ' onmouseover="if (isDOM || isIE4) {hilightBase(\'el2\', \'' . $cfg['LeftPointerColor'] . '\')}" onmouseout="if (isDOM || isIE4) {hilightBase(\'el2\', \'' . $cfg['LeftBgColor'] . '\')}"');
  757.  
  758.             echo "\n";
  759.             echo '    <div id="el2Parent" class="parent"' . $on_mouse . '>';
  760.  
  761.             if (!empty($num_tables)) {
  762.                 echo "\n";
  763.                 ?>
  764.         <div class="nowrap"><a class="item" href="<?php echo $cfg['DefaultTabDatabase']; ?>?<?php echo $common_url_query; ?>" onclick="if (capable) {expandBase('el2', true); return false} else {return true}">
  765.             <img name="imEx" id="el2Img" src="<?php echo $pmaThemeImage; ?>b_plus.png" border="0" width="9" height="9" alt="+" /></a>
  766.                 <?php
  767.             } else {
  768.                 echo "\n";
  769.                 ?>
  770.         <div class="nowrap"><img name="imEx" src="<?php echo $pmaThemeImage; ?>b_minus.png" border="0" width="9" height="9" alt="-" />
  771.                 <?php
  772.             }
  773.             echo "\n";
  774.             ?>
  775.         <a class="item" href="<?php echo $cfg['DefaultTabDatabase']; ?>?<?php echo $common_url_query; ?>" title="<?php echo ($db_tooltip != '' && $cfg['ShowTooltipAliasDB'] ? htmlspecialchars($db) : htmlspecialchars($db_tooltip)); ?>" onclick="if (capable) {expandBase('el2', false)}">
  776.             <span class="heada"><?php echo ($db_tooltip != '' && $cfg['ShowTooltipAliasDB'] ? '<i>' . htmlspecialchars($db_tooltip) . '</i>' : htmlspecialchars($db)); ?><bdo dir="<?php echo($text_dir); ?>">  </bdo></span><span class="headaCnt">(<?php echo $num_tables_disp; ?>)</span></a></div>
  777.     </div>
  778.  
  779.     <div id="el2Child" class="child" style="margin-bottom: 5px"<?php echo $on_mouse; ?>>
  780.     <?php
  781.     } else {
  782.         echo "\n";
  783.         ?>
  784.     <div id="el2Parent" class="parent nowrap">
  785.         <a class="item" href="<?php echo $cfg['DefaultTabDatabase']; ?>?<?php echo $common_url_query; ?>">
  786.             <span class="heada"><?php echo ($db_tooltip != '' && $cfg['ShowTooltipAliasDB'] ? htmlspecialchars($db_tooltip) : htmlspecialchars($db)); ?><bdo dir="<?php echo($text_dir); ?>">  </bdo></span><span class="headaCnt">(<?php echo $num_tables_disp; ?>)</span></a>
  787.     </div>
  788.     <div id="el2Child" class="child nowrap" style="margin-bottom: 5px">
  789.         <?php
  790.     }
  791.  
  792.     // Displays the list of tables from the current database
  793.     $tablestack = array();
  794.     $table_array = array();
  795.     while (list($table) = PMA_DBI_fetch_row($tables)) {
  796.         $table_item = (!empty($tooltip_name) && isset($tooltip_name[$table]) && !empty($tooltip_name[$table]) && $cfg['ShowTooltipAliasTB'] && strtolower($cfg['ShowTooltipAliasTB']) !== 'nested'
  797.                     ? htmlspecialchars($tooltip_name[$table])
  798.                     : htmlspecialchars($table));
  799.         $table_array[$table] = $table_item;
  800.     }
  801.  
  802.     if ($cfg['NaturalOrder']) {
  803.         natcasesort($table_array);
  804.     }
  805.  
  806.     foreach ($table_array as $table => $table_sortkey) {
  807.         $alias = (!empty($tooltip_name) && isset($tooltip_name[$table]))
  808.                    ? htmlspecialchars($tooltip_name[$table])
  809.                    : '';
  810.         $url_title = (!empty($tooltip) && isset($tooltip[$table]))
  811.                    ? htmlspecialchars($tooltip[$table])
  812.                    : '';
  813.         $table_item = ($alias != '' && $cfg['ShowTooltipAliasTB'] && strtolower($cfg['ShowTooltipAliasTB']) !== 'nested'
  814.                     ? $alias
  815.                     : htmlspecialchars($table));
  816.         $tablename = ($alias != '' && $cfg['ShowTooltipAliasTB']
  817.                    ? $alias
  818.                    : htmlspecialchars($table));
  819.  
  820.         $book_sql_query = PMA_queryBookmarks($db, $cfg['Bookmark'], '\'' . PMA_sqlAddslashes($table) . '\'', 'label');
  821.  
  822.         if ($cfg['LeftFrameLight']) {
  823.         echo "\n";
  824.         ?>
  825.             <a target="phpmain<?php echo $hash; ?>" href="sql.php?<?php echo $common_url_query; ?>&table=<?php echo urlencode($table); ?>&sql_query=<?php echo (isset($book_sql_query) && $book_sql_query != FALSE ? urlencode($book_sql_query) : urlencode('SELECT * FROM ' . PMA_backquote($table))); ?>&pos=0&goto=<?php echo $cfg['DefaultTabTable']; ?>" title="<?php echo $strBrowse . ': ' . $url_title; ?>">
  826.                   <img src="<?php echo $pmaThemeImage . 'b_sbrowse.png'; ?>" width="10" height="10" border="0" alt="<?php echo $strBrowse . ': ' . $url_title; ?>" /></a><bdo dir="<?php echo $text_dir; ?>"> </bdo>
  827.               <a class="tblItem" id="tbl_<?php echo md5($table); ?>" title="<?php echo $url_title; ?>" target="phpmain<?php echo $hash; ?>" href="<?php echo $cfg['DefaultTabTable']; ?>?<?php echo $common_url_query; ?>&table=<?php echo urlencode($table); ?>">
  828.                   <?php echo $table_item; ?></a><br />
  829.         <?php
  830.         } else {
  831.             $list_item = '<a target="phpmain' . $hash . '" href="sql.php?' . $common_url_query . '&table=' . urlencode($table) . '&sql_query=' . (isset($book_sql_query) && $book_sql_query != FALSE ? urlencode($book_sql_query) : urlencode('SELECT * FROM ' . PMA_backquote($table))) . '&pos=0&goto=' . $cfg['DefaultTabTable'] . '" title="' . $strBrowse . ': ' . $url_title . '">';
  832.             $list_item .= '<img src="' . $pmaThemeImage . 'b_sbrowse.png" width="10" height="10" border="0" alt="' . $strBrowse . ': ' . $url_title . '" /></a>';
  833.             $list_item .= '<bdo dir="' . $text_dir . '"> </bdo>' . "\n";
  834.             $list_item .= '<a class="tblItem" id="tbl_' . md5($table) . '" title="' . $url_title . '" target="phpmain' . $hash . '" href="' . $cfg['DefaultTabTable'] . '?' . $common_url_query . '&table=' . urlencode($table) . '">';
  835.             $list_item .= $table_item . '</a><br />';
  836.  
  837.             // garvin: Check whether to display nested sets
  838.             if (!empty($cfg['LeftFrameTableSeparator'])) {
  839.                 $_table = explode($cfg['LeftFrameTableSeparator'],  str_replace('\'', '\\\'', $tablename));
  840.                 if (is_array($_table)) {
  841.                     foreach ($_table AS $key => $val) {
  842.                         if ($val == '') {
  843.                             $_table[$key] = '__protected__';
  844.                         }
  845.                     }
  846.                     $_table = PMA_reduceNest($_table);
  847.  
  848.                     if (count($_table) == 1) {
  849.                         array_unshift($_table, '');
  850.                     }
  851.                     PMA_multimerge($tablestack, $_table);
  852.                 } else {
  853.                     $tablestack['']['pma_name'][] = $table_item;
  854.                     $tablestack['']['pma_list_item'][] = $list_item;
  855.                 }
  856.             } else {
  857.                 $tablestack['']['pma_name'][] = $table_item;
  858.                 $tablestack['']['pma_list_item'][] = $list_item;
  859.             }
  860.         }
  861.     } // end for $j (tables list)
  862.  
  863.     if (!$cfg['LeftFrameLight']) {
  864.         PMA_nestedSet('1', $tablestack);
  865.         ?>
  866.     </div>
  867.     <!-- Arrange collapsible/expandable db list at startup -->
  868.     <script type="text/javascript" language="javascript1.2">
  869.     <!--
  870.     if (isNS4) {
  871.       firstEl  = 'el1Parent';
  872.       firstInd = nsGetIndex(firstEl);
  873.       nsShowAll();
  874.       nsArrangeList();
  875.     }
  876.     var expandedDb = '<?php echo (empty($selected_db)) ? '' : 'el' . $selected_db . 'Child'; ?>';
  877.     //-->
  878.     </script>
  879.         <?php
  880.     } else {
  881.         echo '    </div>';
  882.     }
  883.  
  884.     echo "\n";
  885. } // end if ($num_dbs == 1)
  886.  
  887.  
  888. // Case where no database has to be displayed
  889. else {
  890.     echo "\n";
  891.     echo '<p>' . $strNoDatabases . '</p>';
  892. } // end if ($num_dbs == 0)
  893. echo "\n";
  894.  
  895. // 2004-08-05 added by Michael Keck
  896. //            reload queryframe if it exists and we delete a database
  897. //            or select a database from the db_list.
  898. $my_lightm_db = '';
  899. if (isset($lightm_db) && $lightm_db!='') {
  900.     $my_lightm_db = $lightm_db;
  901. }
  902.  
  903. if ($cfg['LeftFrameLight'] && $cfg['QueryFrame'] && $cfg['QueryFrameJS']) {
  904.     if (!isset($table_array) || count($table_array)==0) {
  905.         $my_url_query = PMA_generate_common_url('', '', '&');
  906. ?>
  907. <script language="JavaScript" type="text/javascript">
  908. <!--
  909. function check_queryframe_reload() {
  910.     if (typeof(window.parent.frames['queryframe'])!='undefined' && typeof(window.parent.frames['queryframe'].document.forms['left'])!='undefined') {
  911.         if (window.parent.frames['queryframe'].document.forms['left'].elements['lightm_db'].value!='<?php echo $my_lightm_db; ?>') {
  912.             window.parent.frames['queryframe'].location.replace('<?php echo 'queryframe.php?' . $my_url_query . '&hash=' . $hash; ?>');
  913.         }
  914.     }
  915. }
  916. // This is a workaround for the problem in Safari 1.2.3 where the
  917. // top left frame does not load.
  918. // If we call this right away it usually prevents the top-left frame from
  919. // loading in Safari, so call it delayed. -Ryan Schmidt 2004-08-15
  920. setTimeout('check_queryframe_reload()', 1000);
  921.  
  922. //-->
  923. </script>
  924. <?php
  925.     }
  926. }
  927. ?>
  928.  
  929. </body>
  930. </html>
  931.  
  932. <?php
  933. /**
  934.  * Close MySql connections
  935.  */
  936. if (isset($dbh) && $dbh) {
  937.     @PMA_DBI_close($dbh);
  938. }
  939. if (isset($userlink) && $userlink) {
  940.     @PMA_DBI_close($userlink);
  941. }
  942.  
  943.  
  944. /**
  945.  * Sends bufferized data
  946.  */
  947. if (isset($cfg['OBGzip']) && $cfg['OBGzip']
  948.     && isset($ob_mode) && $ob_mode) {
  949.      PMA_outBufferPost($ob_mode);
  950. }
  951. ?>
  952.